Firebird a zmena collate v uz existujucich tabulkach

Otázka od: hlas

4. 6. 2004 7:52

Neviete niekto poradit ako zmenit collate na csy v uz existujucej
databaze a uz existujucich tabulkach?


Odpovedá: Pavel Cisar

4. 6. 2004 9:06

Haj hou!

On 4 Jun 2004 at 8:25, hlas wrote:

> Neviete niekto poradit ako zmenit collate na csy v uz existujucej
> databaze a uz existujucich tabulkach?

U domeny:
ALTER DOMAIN name TYPE stejny_typ CHARACTER SET charset COLLATE
collate ;

Pokud nepouzivate domeny 9coz je chyba), pak primo na tabulce:
ALTER TABLE table ALTER sloupec TYPE stejny_typ CHARACTER SET charset
COLLATE collate ;

Z hlavy si nejsem jisty, jak si FB poradi s indexy na dana pole,
mozna bude nutne je nejdrive odstranit. Po provedeni zmen je *velmi
vhodne* udelat zalohu a obnovu.

S pozdravem

Pavel Cisar ( ICQ: 89017288)
Mobil: 724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase


Odpovedá: hlas

6. 6. 2004 13:41


From: "Pavel Cisar"
> U domeny:
> ALTER DOMAIN name TYPE stejny_typ CHARACTER SET charset COLLATE
> collate ;


Pouzivam domeny, ale v IBExperte sa mi nedari vykonat tento prikaz:

ALTER DOMAIN vch5 TYPE varchar(50) CHARACTER SET WIN1250 COLLATE PXW_CSY;

kurzor mi ostava pred collate - tam je vraj chyba - hlasi ibexpert;

vch5 je nazov domeny
varchar 50 je typ
win1250 je character set
a
win1250 je povodny collate, ktory sa snazim zmenit na PXW_CSY

tiez doteraz som robil mnoho zmien priamo cez prostredie IBEXpert a ibexpert
vygeneroval
sam sql prikaz. v tomto pripade ak v prostredi ibexperta zmenim collate, tak
ibexpert mi to umozni,
ale nic nevykona.

je chyba v ibexperte? je ten prikaz spravny?



Odpovedá: hlas

6. 6. 2004 19:00

From: "Pavel Cisar"

> U domeny:
> ALTER DOMAIN name TYPE stejny_typ CHARACTER SET charset COLLATE
> collate ;

a teraz som to skusal aj mimo ibexperta cez komponentu v delphi.
jednoducho prikaz:

alter domain vch5 type varchar(50) character set win1250 collate PXW_CSY;

je chybny a nezbehne.

Robim ja niekde chybu alebo som daco prehliadol?


Odpovedá: hlas

7. 6. 2004 7:05

From: "Pavel Cisar"

> U domeny:
> ALTER DOMAIN name TYPE stejny_typ CHARACTER SET charset COLLATE
> collate ;


skusal som vytvorit novu domenu, ktora nie je nikde pouzita a rovnu ju
zmenit
(zmenit v nej collate z win1250 na csy) ani to nejde prikazom:

alter DOMAIN "moja" type VARCHAR(20) CHARACTER SET WIN1250 COLLATE PXW_CSY;

takze to nesuvisi ani s okolitymi polami, v ktorych je pouzita.


Odpovedá: Pavel Cisar

7. 6. 2004 8:24

Haj hou!

On 6 Jun 2004 at 14:21, hlas wrote:

>
> From: "Pavel Cisar"
> > U domeny:
> > ALTER DOMAIN name TYPE stejny_typ CHARACTER SET charset COLLATE
> > collate ;
>
>
> Pouzivam domeny, ale v IBExperte sa mi nedari vykonat tento prikaz:
>
> ALTER DOMAIN vch5 TYPE varchar(50) CHARACTER SET WIN1250 COLLATE PXW_CSY;
>
> kurzor mi ostava pred collate - tam je vraj chyba - hlasi ibexpert;

Chybicka se vloudila. ALTER DOMAIN a ALTER TABLE skutecne nedovoluji
specifikovat collate, a to v rozporu s dokumentaci  

Nicmene reseni existuje:

1) "neciste" reseni, ktere provadi i IBExpert pokud provedete zmenu
collate primou editaci domeny v editoru:

update RDB$FIELDS set
RDB$CHARACTER_SET_ID = 51, /* 51 je WIN1250 */
RDB$COLLATION_ID = 1 /* 1 je PXW_CSY */
where RDB$FIELD_NAME = 'nazev-domeny'

2) "ciste" reseni. Vytvorit novou domenu s novym collate, vytvorit
novy sloupec dle teto domeny. Prekopirovat data pomoci UPDATE, zrusit
puvodni sloupec a domenu.

V obou pripadech provest nasledne zalohu a obnovu.

S pozdravem
Pavel Cisar ( ICQ: 89017288)
Mobil: 724 281429
http://www.ibphoenix.cz
Vse co potrebujete pro Firebird a InterBase